// 获取场景中 id 为 "开关-1" 的实体，并断言它不为 null
export const aswitch1: GameEntity = world.querySelector('#开关-1')!;

// 获取场景中所有实体，并过滤出 id 包含在指定数组中的实体
const entitys: GameEntity[] = world
    .querySelectorAll('*')
    .filter((e) =>
        [
            '线光源(白-16x1x1)-1',
            '线光源(白-16x1x1)-1-1',
            'tap音符-2',
            '有手就行-音乐音符-1',
            '音符-1',
            '有手就行-音乐音符-1-1',
            '音符-1-1',
            '白色方块',
            '蓝色方块',
            '箜篌-1',
        ].includes(e.id)
    );

// 循环遍历所有筛选出的实体，并将它们的 meshInvisible 属性设置为 true，使其在场景中不可见
entitys.forEach((e) => {
    e.meshInvisible = true;
});

// 定义一个变量 canInteract，用于控制开关的互动频率，初始值为 true，表示可以互动
let canInteract: boolean = true;

// 允许实体进行互动
aswitch1.enableInteract = true;
// 设置进入实体互动范围时，提示文本的颜色为白色
aswitch1.interactColor = new GameRGBColor(1, 1, 1);
// 设置实体的互动范围为 5
aswitch1.interactRadius = 5;
//aswitch1.interactSound  // 这里缺少赋值，可以设置互动音效，例如：aswitch1.interactSound = 'audio/switch.mp3';

/**
 * 监听开关实体的互动事件
 * 当玩家与开关实体进行互动时，会触发此函数
 */
aswitch1.onInteract(() => {
    // 检查是否可以互动
    if (canInteract) {
        // 设置为 false，防止在冷却时间内重复互动
        canInteract = false;
        // 将开关的网格体方向旋转 180 度，实现开关的切换效果
        aswitch1.meshOrientation.copy(
            aswitch1.meshOrientation.rotateY(Math.PI)
        );
        const interval = setInterval(async () => {
            entitys.forEach((e) => {
                e.meshInvisible = false;
            });
            await sleep(1000);
            entitys.forEach((e) => {
                e.meshInvisible = true;
            });
        }, 3000);
        setTimeout(() => {
            clearInterval(interval);
            entitys.forEach((e) => {
                e.meshInvisible = true;
            });
            // 冷却时间结束后，重置为 true，允许再次互动
            canInteract = true;
            // 将开关的网格体方向旋转回原来的方向
            aswitch1.meshOrientation.copy(
                aswitch1.meshOrientation.rotateY(Math.PI)
            );
        }, 120000);
    }
});
